home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / SAT / SAT Invaders sample ƒ / sMissile.p < prev    next >
Encoding:
Text File  |  1993-09-19  |  1.8 KB  |  79 lines  |  [TEXT/PJMM]

  1. {===============================================}
  2. {================= Missile sprite unit ================}
  3. {===============================================}
  4.  
  5. { Example file for Ingemars Sprite Animation Toolkit. }
  6. { © Ingemar Ragnemalm 1992 }
  7. { See doc files for legal terms for using this code. }
  8.  
  9. unit sMissile;
  10.  
  11. { Sprite unit. A sprite unit should include the following routines:}
  12. { Init-procedure, that initializes private bitmaps}
  13. { Setup-procedure, that sets variables other than the standard ones set by MakeSprite }
  14. { Handle-procedure, to be called once per iteration until the sprite dies }
  15. { Hittask-procedure (optional), for advanced collission handling. }
  16.  
  17. { Missile object for the SATInvaders sample game. }
  18.  
  19. interface
  20.  
  21.     uses
  22.         SAT, SoundConst, GameGlobals;
  23.  
  24.     var
  25.         missilecount: integer; { Exported since it has to be reset by SetupLevel }
  26.  
  27.     procedure InitMissile;
  28.     procedure SetupMissile (sp: SpritePtr);
  29.     procedure HandleMissile (me: SpritePtr);
  30.  
  31. implementation
  32.  
  33.     const
  34.         missileSpeed = 10;
  35.         maxMissiles = 5;
  36.  
  37.     var
  38.         missileFace: FacePtr;
  39.  
  40.     procedure InitMissile;
  41.         var
  42.             h: Handle;
  43.     begin
  44.         missileFace := GetFace(136);
  45.     end;
  46.  
  47.     procedure SetupMissile (sp: SpritePtr);
  48.     begin
  49.         sp^.face := missileFace;
  50.         SetRect(sp^.hotRect, 3, 0, 13, 17);
  51.  
  52.         if missilecount >= MaxMissiles then
  53.             sp^.task := nil { If too many, remove us immediately }
  54.         else
  55.             missilecount := succ(missilecount);
  56.     end;
  57.  
  58.     procedure HandleMissile (me: SpritePtr);
  59.         var
  60.             sp: Spriteptr;
  61.             divmed: integer;
  62.     begin
  63.         if me^.kind <> -1 then
  64.             begin
  65.                 me^.task := nil;
  66.                 missilecount := pred(missilecount);
  67.                 SATSoundPlay(dunkH, 1, false);
  68.             end;
  69.  
  70.         me^.position.v := me^.position.v + missileSpeed;
  71.  
  72.         if me^.position.v > offSizeV then
  73.             begin
  74.                 me^.task := nil;
  75.                 missilecount := pred(missilecount);
  76.             end;
  77.     end;
  78.  
  79. end.